package rocket;


import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.client.producer.SendStatus;
import org.apache.rocketmq.common.message.Message;
import org.junit.jupiter.api.Test;
import java.nio.charset.StandardCharsets;

/**
 * 测试代码 发送消息
 */
public class MyProducer {
    /**
     * 发送消息生产者方法
     */
    @Test
    public void send() throws Exception {
        //1.组织一个可以连接rocketmq 生产者对象 一个对象代表一个生产者进程
        DefaultMQProducer producer=new DefaultMQProducer();
        //rocketmq对生产者有管理的结构-分组 生产的消息内容是否是同一个业务
        producer.setProducerGroup("test-group-01");
        //设置rocketmq的连接地址 localhost:9876(nameserver)
        producer.setNamesrvAddr("localhost:9876");
        //2.开启连接之后,整理封装一个发送的消息对象
        //开启连接 如果运行的rocketmq资源比较饱满了 可能导致start连接过慢
        producer.start();
        //start后 如果过慢会导致后续代码消息发送失败
        //Thread.sleep(1000);
        Message message=new Message();
        //希望将消息发送到队列 指定一个消息目标 队列名称--主题名称
        message.setTopic("topic01");
        //message中 作为传递的消息数据 需要包装数据内容
        String msgtxt="你好,我是第一条消息";
        message.setBody(msgtxt.getBytes(StandardCharsets.UTF_8));
        //3.发送执行,获取发送反馈结果 在应用中我们会使用2种大类型的发送 同步发送 异步发送
        SendResult result = producer.send(message);
        SendStatus sendStatus = result.getSendStatus();
        //如果sendStatus 值等于 SEND_OK 就表示发送成功了
        if (sendStatus.name().equals("SEND_OK")){
            System.out.println("发送消息成功");
        }
        //如果这种发送代码在程序中编写,每次发送完毕 关闭连接
        producer.shutdown();
    }
}
